{"id":16493911,"url":"https://github.com/echosoar/program-languages-compare","last_synced_at":"2025-03-01T08:16:18.791Z","repository":{"id":46831945,"uuid":"301138119","full_name":"echosoar/program-languages-compare","owner":"echosoar","description":"Compare the similarities and differences between various programming languages","archived":false,"fork":false,"pushed_at":"2022-04-19T13:56:20.000Z","size":118,"stargazers_count":4,"open_issues_count":1,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-11T22:17:48.536Z","etag":null,"topics":["cpp","golang","language-comparison","rust","typescript"],"latest_commit_sha":null,"homepage":"https://echosoar.github.io/program-languages-compare/","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/echosoar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-10-04T13:36:06.000Z","updated_at":"2024-12-16T05:54:22.000Z","dependencies_parsed_at":"2022-09-03T19:01:48.072Z","dependency_job_id":null,"html_url":"https://github.com/echosoar/program-languages-compare","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/echosoar%2Fprogram-languages-compare","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/echosoar%2Fprogram-languages-compare/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/echosoar%2Fprogram-languages-compare/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/echosoar%2Fprogram-languages-compare/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/echosoar","download_url":"https://codeload.github.com/echosoar/program-languages-compare/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241335595,"owners_count":19946086,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","golang","language-comparison","rust","typescript"],"created_at":"2024-10-11T14:11:05.525Z","updated_at":"2025-03-01T08:16:18.761Z","avatar_url":"https://github.com/echosoar.png","language":"HTML","readme":"# 多语言速查表\n\n对比多种编程语言之间的异同\n\nCompare the similarities and differences between various programming languages\n\nOnline: [program-languages-compare](https://echosoar.github.io/program-languages-compare/)\n\n\n## 基本概念\n\n### 变量\n\n#### 单个变量\n\n##### typescript\n```typescript\nconst a: number= 1;\nlet b: string = 'str';\nvar c: boolean = false;\n```\n\n##### golang\n```golang\nconst a int = 1;\nvar b string = \"str\";\nc := false;\n```\n\n##### rust\n```rust\n// a 为 不可变变量，即不能改变值\nlet a: u64 = 1;\n// 不可变变量可以重新定义\n// rust 支持自动类型推导\nlet a = 2;\n// 使用 mut 关键词，使变量可变\nlet mut ma = 1;\n// ma = \"abc\"; 报错，类型错误\n// ma = 1.2; 报错，类型错误，精度损失\nconst b = \"str\"\nlet c = true;\nlet d: bool = false;\n\n```\n\n##### c++\n```c++\nconst int a = 123;\nint a(123); // C++\nint a{123}; // C++ 11\nint a = {123};\nchar b[] = \"str\";\nbool c = false;\n```\n\n\n#### 多个变量\n\n##### typescript\n```typescript\nlet d: number = 1, e: number = 2;\nconst f: number = 1, g: number = 2;\n```\n\n##### golang\n```golang\nvar a, b  = 1, 2;\nconst (\n  a = 1\n  b = 2\n  c = 3\n)\n```\n\n##### rust\n```rust\nlet (a, b, c) = (42, \"hello\", 5.0);\n```\n\n##### c++\n```c++\nint d = 1, e = 2;\nconst int f = 1, g = 2;\n\n```\n\n\n### 注释\n\n##### typescript\n```typescript\n// 单行注释\n/* 多行注释 */ \n```\n\n##### golang\n```golang\n// 单行注释\n/* 多行注释 */ \n```\n\n##### rust\n```rust\n// 单行注释\n/// 三个反斜也可以\n/* 多行注释 */ \n```\n\n##### c++\n```c++\n// 单行注释\n/* 多行注释 */ \n```\n\n\n## 类型\n\n### 基本类型\n\n#### 字符串\n\n##### typescript\n```typescript\nlet str: string = 'str';\n```\n\n##### golang\n```golang\nvar str string = \"str\";\nvar str = \"str\";\n```\n\n##### rust\n```rust\n// 字符\nlet char1: char = 'a';\nlet char2 = 'a';\n// 字符串\nlet str1 = \"string\";\nlet str1: \u0026str = \"string\";\nlet mut str2 = String::new();\nstr2 = str1.to_string();\n// \" 与 ' 都需要使用 \\ 转义\nlet str1 = \"\\\"test\\\"\";\n// 如果不想转义，可以使用 原始字符串\nlet str1 = r#\"sam said: \"xxx\".\"#\n// 如果原始字符串中出现 #，两侧需要更多的 #\nlet str1 = r###\"##\"###;\n```\n\n##### c++\n```c++\nchar str[4] = {\"s\", \"t\", \"r\", \"\\0\"};\nchar str[] = \"str\";\n// #include \u003cstring\u003e\nstd::string str = \"str\";\n\n```\n\n\n#### 数字\n\n##### typescript\n```typescript\nlet num: number = 123;\n```\n\n##### golang\n```golang\nvar num int = 123;\n```\n\n##### rust\n```rust\nlet num = 123; // i32\nlet num64: i64 = 123;\nlet float64 = 2.0; // f64\nlet float32: f32 = 3.0; // f32\n```\n\n##### c++\n```c++\nint num = 123;\n```\n\n\n#### 布尔值\n\n##### typescript\n```typescript\nconst bf: boolean = false;\n```\n\n##### golang\n```golang\nvar f bool = false;\nf := false;\n```\n\n##### rust\n```rust\nlet c = true;\nlet d: bool = false;\n```\n\n##### c++\n```c++\nbool f = false;\n```\n\n\n### 数组\n\n#### 定义\n\n##### typescript\n```typescript\nlet arr: Array\u003cnumber\u003e = [1, 2];\n```\n\n##### golang\n```golang\n// 数组\narr := [2]int{1, 2};\nvar arr = [...]int{1, 2};\n// 切片\narr := []int{1, 2}\n```\n\n##### rust\n```rust\nlet arr = [1, 2];\n// [类型;数量]\nlet arr: [i32;2] = [1, 2];\n// 都初始化为 -1\nlet arr: [i32;2] = [-1;2];\n// 可变长数组 vector\nlet varr: Vec\u003ci32\u003e = Vec::new();\n// rust 提供了宏 vec! 根据值创建 vector\nler mut varr = vec![1,2];\n```\n\n##### c++\n```c++\nint arr[2] = {1, 2};\nint arr[] {1, 2};\n```\n\n\n#### 获取长度\n\n##### typescript\n```typescript\narr.length === 2\n```\n\n##### golang\n```golang\nlen(arr) == 2\n```\n\n##### rust\n```rust\narr.len() == 2\n```\n\n##### c++\n```c++\nsizeof arr /sizeof(arr[0]) == 2;\n// C++ 11\nint length = std::end(arr) - std::begin(arr);\n```\n\n\n#### 遍历\n\n##### typescript\n```typescript\narr.forEach((item: number, i: number) =\u003e {\n  // do something\n});\narr.map((item: number, i: number) =\u003e {\n  return item;\n});\n```\n\n##### golang\n```golang\nfor index, value := range arr {\n  // do something\n}\n```\n\n##### rust\n```rust\n// 迭代值\nfor val in arr.iter(){\n    println!(\"value is :{}\", val);\n}\nfor index in 0..2 {\n    println!(\"index is: {} \u0026 value is : {}\",index, arr[index]);\n}\n// 遍历 vector 数组\nfor i in \u0026mut varr {\n    println!(\"{}\", i);\n}\n```\n\n##### c++\n```c++\nfor (int index = 0; index \u003c len; index ++) {\n  int value = arr[i];\n}\n// C++ 11\nfor (auto value : arr) {}\n\n```\n\n\n#### 截取\n\n##### typescript\n```typescript\narr.slice(0, 1)\n```\n\n##### golang\n```golang\narr[0:1]\n```\n\n##### rust\n```rust\n\u0026arr[0..1];\n// 包含结尾元素需要加 =\n\u0026arr[0..=0];\n```\n\n##### c++\n```c++\nint a[1];\nfor (int index = 0, aIndex = 0; index \u003c 1; index ++, aIndex ++) {\n  a[aIndex] = arr[index];\n}\n```\n\n\n#### 连接\n\n##### typescript\n```typescript\nvar strArr: string[] = ['a', 'b'];\nstrArr.join(',')\n```\n\n##### golang\n```golang\nimport \"strings\"\nvar strArr = [...]string{\"a\", \"b\"};\nstrings.Join(strArr, \",\");\n```\n\n##### rust\n```rust\n// \"hello world\"\n[\"hello\", \"world\"].join(\" \");\n// [1, 2, 0, 3, 4]\n[[1, 2], [3, 4]].join(\u00260)\n// [1, 2, 3, 4]\n[[1, 2], [3, 4]].join(\u0026[][..])\n\n// Vec\u003cString\u003e Join(\u0026str)\nlet va = vec![\"1\",\"2\",\"3\"];\n// 1-2-3\nva.join(\"-\");\n```\n\n##### c++\n```c++\n// #include \u003csstream\u003e\n\nstd::stringstream ss;\nint len = sizeof a / sizeof a[0];\nfor(int i = 0; i \u003c len; i ++) {\n   ss \u003c\u003c a[i] \u003c\u003c (i \u003c len - 1 ? \".\": \"\");\n}\n\n```\n\n\n### Map\n\n#### 创建\n\n##### typescript\n```typescript\nlet map: Map\u003cstring, string\u003e = new Map()\n```\n\n##### golang\n```golang\nmapa := make(map[string]string)\n```\n\n##### rust\n```rust\nuse std::collections::HashMap;\nlet mut map = HashMap::new();\n// 或者也可以通过 array 来初始化\nlet mut map2 = HashMap::from([\n    (\"key1\", \"value1\"),\n    (\"key2\", \"value2\"),\n])\n```\n\n##### c++\n```c++\n// #include \u003cmap\u003e\ntypedef std::map\u003cstd::string, std::string\u003e STR_MAP;\nSTR_MAP mapa;\n```\n\n\n#### 设置\n\n##### typescript\n```typescript\nmap = map.set('a', 'b');\n```\n\n##### golang\n```golang\nmapa[\"a\"] = \"b\";\n```\n\n##### rust\n```rust\nmap.insert(\n    \"key\".to_string(),\n    \"value\"\n);\n```\n\n##### c++\n```c++\n// 1. 直接设置，可覆盖\nmapa[\"a\"] = \"b\";\n\n// 2. insert，当已存在key，则失败\n// #include \u003cutility\u003e\nstd::pair\u003cSTR_MAP::iterator, bool\u003e Pair;\nPair result = mapa.insert(STR_MAP::value_type(\"a\", \"b\"));\nresult.second == 1;\n```\n\n\n#### 长度\n\n##### typescript\n```typescript\nconst mapalen = map.size;\n```\n\n##### golang\n```golang\nmapalen := len(mapa);\n```\n\n##### rust\n```rust\nmap.len();\n```\n\n##### c++\n```c++\nint mapalen = mapa.size();\n```\n\n\n#### 读取\n\n##### typescript\n```typescript\nconst mapValue: string = map.get('a');\n```\n\n##### golang\n```golang\nmapa[\"a\"]\n```\n\n##### rust\n```rust\n// get 的参数类型为 \u0026Q\nmap.get(\u0026\"key\".to_string());\nmap[\"key\"];\nmap[\u0026\"key\".to_string()];\n```\n\n##### c++\n```c++\n// 1. 直接读取\nmapa[\"a\"]\n// 2. 通过迭代器来读取\nMAP_STR::iterator ite = mapa.find(\"c\");\nif (ite != mapa.end()) {\n  std::string key = ite-\u003efirst;\n  std::string value = ite-\u003esecond;\n}\n\n```\n\n\n#### 删除\n\n##### typescript\n```typescript\nmap.delete('a');\n```\n\n##### golang\n```golang\ndelete(mapa, \"a\");\n```\n\n##### rust\n```rust\nmap.remove(\u0026\"key\".to_string());\n```\n\n##### c++\n```c++\n\n// 1. 用关键字刪除\n// 如果刪除了會返回1，否則返回0\nint n = mapa.erase(\"a\");\n\n// 2. 用迭代器刪除\nMAP_STR::iterator iter = mapa.find(\"c\");\nmapa.erase(iter);\n\n```\n\n\n#### 遍历\n\n##### typescript\n```typescript\nfor (let [key, value] of map) {\n   // do something\n}\n```\n\n##### golang\n```golang\nfor key, value := range mapa {}\n```\n\n##### rust\n```rust\nfor (key, value) in \u0026map {\n    println!(\"{}: \\\"{}\\\"\", key, value);\n}\n```\n\n##### c++\n```c++\nMAP_STR::iterator iter = mapa.begin();\nwhile(iter != mapa.end()) {\n  std::string key = ite-\u003efirst;\n  std::string value = ite-\u003esecond;\n  iter ++;\n}\n\n```\n\n\n### 结构\n\n#### 定义\n\n##### typescript\n```typescript\ninterface Obj {\n  name: number;\n};\nlet obj: Obj = {\n  name: 123\n};\n```\n\n##### golang\n```golang\nobj := struct {\n  name int\n}{ 123 };\n```\n\n##### rust\n```rust\nstruct StructItem {\n    str: String,\n    i: u32\n}\nlet str = String::from(\"123\");\nlet s = StructItem {\n    str,\n    i: 123\n}\nlet s2 = StructItem {\n    i: 124,\n    ..s\n}\n// 元祖结构体\nstruct T1(u32, u32)；\nlet t = T1(1,2);\n```\n\n##### c++\n```c++\nstruct STR {\n  std::string name;\n  int age;\n};\n\nstruct STR obj = { \"test\", 20 };\n// 也可以忽略struct 和 等号\nSTR obj { \"test\", 20 };\n\n```\n\n\n#### 获取属性值\n\n##### typescript\n```typescript\nconst objKeys: string[] = Object.keys(obj);\n\n```\n\n##### golang\n```golang\nt := reflect.TypeOf(obj);\nfor i := 0; i \u003c t.NumField(); i++ {\n  t.Field(i).Name;\n}\n```\n\n##### rust\n```rust\ns2.str; // 123\nt.1; // 2\n```\n\n##### c++\n```c++\n// 不支持\n\n```\n\n\n### 正则表达式\n\n#### 定义\n\n##### typescript\n```typescript\nconst reg: RegExp = /a(b)/i;\n```\n\n##### golang\n```golang\nreg, _ := regexp.Compile(\"(?i)a\");\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n// #include \u003cregex\u003e\nstd::regex reg(\"a\", std::regex_constants::icase);\n```\n\n\n#### 是否匹配\n\n##### typescript\n```typescript\nconst isMatch: boolean = reg.test('A');\n```\n\n##### golang\n```golang\n// 1. 直接匹配\nmatch, _ := regexp.MatchString(\"(?i)a\",\"A\");\n// 2. 先定义，后匹配\nreg, _ := regexp.Compile(\"(?i)a\");\nmatch, _ := reg.MatchString(\"A\");\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\nstd::string s = \"A\";\nbool match = std::regex_search(s, reg);\n```\n\n\n#### 匹配结果\n\n##### typescript\n```typescript\nlet matchRes = reg.exec('abcd');\nlet [match, capture1] = matchRes;\n// match === 'ab'\n// capture1 === 'b'\nlet matchIndex: number = matchRes.index;\n// matchIndex === 0\n\n```\n\n##### golang\n```golang\nreg, _ := regexp.Compile(\"a(b)\");\nres, _ := reg.FindStringSubmatch(\"abcd\");\nmatch := res[0];\n// match === 'ab'\ncapture1 := res[1];\n// capture1 === 'b'\nindexRes := reg.FindStringIndex(\"abcd\");\nindex := indexRes[0]\n// index === 0\n\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\nstd::smatch submatch;\nstd::regex_match(s, submatch, reg);\nstd::ssub_match matchRes = submatch[0];\nstd::string match = matchRes.str();\n// match === 'ab'\nstd::ssub_match capture1Res = submatch[1];\nstd::string capture1Res = capture1Res.str();\n// capture1 === 'b'\n```\n\n\n### 枚举\n\n\n## 语句\n\n### 条件\n\n##### typescript\n```typescript\nif (true) {\n} else if (true) {\n} else { }\n```\n\n##### golang\n```golang\nif true {}\nelse if true {}\nelse { }\n```\n\n##### rust\n```rust\n// 条件可以忽略小括号\nif a \u003e 0 {\n} else if (a \u003c 0) {\n} else {\n}\n// 还能赋值，等同三元运算符\nlet b = if (a \u003e 0) { 1 } else { 0 }\n```\n\n##### c++\n```c++\n\n\n\n```\n\n\n### 循环\n\n#### for\n\n##### typescript\n```typescript\n// 普通for循环\nfor(let i = 0; i\u003c10; i++) { }\n// 仅判断\nfor(; Math.random()\u003c0.5;) {}\n// 无限循环\nfor(;;) {}\n// 遍历索引\nfor(let index in arr) { }\n// 遍历元素\nfor(let value of arr) {}\n```\n\n##### golang\n```golang\n// 普通for循环\nfor i:= 0; i\u003c 10; i++ { }\n// 仅判断\nfor i\u003c10 {}\nfor ;i\u003c10; {}\n// 无限循环\nfor {}\n// 遍历索引\nfor index, _ := range array {}\n// 遍历元素\nfor _, value := range array {}\n```\n\n##### rust\n```rust\nlet a = [10, 20, 30, 40, 50];\nfor i in 0..5 {\n    println!(\"a[{}] = {}\", i, a[i]);\n}\nfor i in a.iter() {\n    println!(\"a[{}] = {}\", i, a[i]);\n}\n```\n\n##### c++\n```c++\n// 普通for循环\n\n// 仅判断\n\n// 无限循环\n\n// 遍历索引\n\n// 遍历元素\n\n```\n\n\n#### while\n\n##### typescript\n```typescript\nwhile(Math.random()\u003c0.5) {}\n```\n\n##### golang\n```golang\nfor i\u003c10 {}\n```\n\n##### rust\n```rust\nlet mut number = 1;\nwhile number != 4 {\n    number += 1;\n}\n// 无限循环\n\nlet mut i = 0;\n// 支持 break 出来的值赋值\nlet num = loop {\n    if i == 10 {\n        break i;\n    }\n    i += 1;\n};\nnum == 10;\n```\n\n##### c++\n```c++\n\n```\n\n\n### 选择\n\n#### switch\n\n##### typescript\n```typescript\nswitch(value) {\n  case 1:\n    break; // 退出需要break\n  case 2:\n  case 3:\n    break;\n}\n```\n\n##### golang\n```golang\nswitch value {\n  case 1:  // 退出 不需要 break\n  case 2:\n    fallthrough; // 继续下一个case\n  case 3:\n}\n```\n\n##### rust\n```rust\nlet num = 3;\nmatch num {\n    1|2=\u003eprintln!(\"\u003c3\"),\n    3=\u003eprintln!(\"=3\"),\n    4..=20=\u003e println!(\"4\u003c= x \u003c= 20\"),\n    _=\u003eprintln!(\"other\"),\n}\n```\n\n##### c++\n```c++\n\n\n\n\n\n\n\n```\n\n\n### 错误捕获\n\n##### typescript\n```typescript\ntry {\n  throw new Error('msg');\n} catch(err) {\n  // 错误处理\n}\n\n```\n\n##### golang\n```golang\nvalue, err := func();\nif err != nil {\n  // 错误处理\n}\n\n```\n\n##### c++\n```c++\n\n\n\n\n\n\n```\n\n\n## 方法与类\n\n### 方法\n\n#### 普通方法\n\n##### typescript\n```typescript\nfunction sum(a: number, b: number) {\n  return a + b;\n}\n```\n\n##### golang\n```golang\nfunc sum(a int, b int) int {\n  return a + b;\n}\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n\n\n```\n\n\n#### 匿名方法\n\n##### typescript\n```typescript\nlet sumFun = (a: number, b: number) =\u003e {\n  return a + b;\n}\n```\n\n##### golang\n```golang\nsum := (a int, b int) int {\n  return a + b;\n}\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n\n\n```\n\n\n#### IIFE\n\n##### typescript\n```typescript\n((a: number, b: number) =\u003e {\n  return a + b;\n})(1, 2);\n\n```\n\n##### golang\n```golang\n(a int, b int) int {\n  return a + b;\n}(1, 2);\n\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n\n\n\n```\n\n\n### 类\n\n#### 声明\n\n##### typescript\n```typescript\nclass A {\n  private a: number;\n  constructor(a: number) {\n    this.a = a;\n  }\n  public method() {}\n  private log() {}\n}\n```\n\n##### golang\n```golang\ntype A struct {\n  a number\n}\nfunc (a *A) Method {}\nfunc (a *A) log { }\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n\n\n\n\n\n\n\n```\n\n\n#### 继承\n\n##### typescript\n```typescript\nclass B extends A {\n  public method() {\n    super.method();\n  }\n}\n```\n\n##### golang\n```golang\ntype B struct {\n  A\n}\nfunc (b *B) method() {\n  b.A.method();\n}\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n\n\n\n\n```\n\n\n#### 实例化\n\n##### typescript\n```typescript\nlet instance: A = new A(123);\n\n```\n\n##### golang\n```golang\nb := B{\n  A: A{\n    a: 123\n  }\n};\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n\n```\n\n\n## 数据处理\n\n### JSON\n\n#### 定义\n\n##### typescript\n```typescript\n`{\n  \"number\": 1,\n  \"boolean\": false,\n  \"string\": \"str\",\n  \"arr\": [\n      12,\n      \"abc\"\n  ],\n  \"obj\": {\n      \"name\": \"name\",\n      \"age\": 12\n  }\n}`\n```\n\n##### golang\n```golang\ntype JStruct struct {\n  Number  int   `json:\"number\"`\n  Boolean bool  `json:\"boolean\"`\n  String  string  `json:\"string\"`\n  Arr []interface{} `json:\"arr\"`\n  Obj struct {\n    Name string `json:\"name\"`\n    Age  int  `json:\"age\"`\n  } `json:\"obj\"`\n}\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n\n\n\n\n\n\n\n\n\n\n\n\n```\n\n\n#### 编码\n\n##### typescript\n```typescript\nconst jsonStr: string = JSON.stringify({\n  name: 123\n});\n```\n\n##### golang\n```golang\nimport \"encoding/json\"\na := struct {\n  Name int `json:name`\n}{123}\njsonStr, _ := json.Marshal(a)\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n\n\n```\n\n\n#### 解码\n\n##### typescript\n```typescript\nconst jsonObj = JSON.parse('{\"name\": 123}');\n\n```\n\n##### golang\n```golang\nstr := `'{\"name\": 123}`;\nstrBytes := []btye(str);\nvar jsonStruct JStruct;\njson.Unmarshal(strBytes, \u0026jsonStruct);\n\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n\n```\n\n\n### 时间\n\n#### 当前时间戳\n\n##### typescript\n```typescript\nconst now: number = Date.now();\n```\n\n##### golang\n```golang\nimport \"time\"\ntime.Now().Unix();\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n```\n\n\n#### 获取时间\n\n##### typescript\n```typescript\nconst date = new Date();\ndate.getFullYear(); // 年\ndate.getMonth() + 1; // 月\ndate.getDate(); // 日\ndate.getHours(); // 时\ndate.getMinutes(); // 分\ndate.getSeconds(); // 秒\n\n```\n\n##### golang\n```golang\nimport \"time\"\nnow := time.Now();\nnow.Year(); // 年\nint(now.Month()); // 月\nnow.Day(); // 日\nnow.Hour(); //时\nnow.Minute(); // 分\nint(now.Second()); // 秒，有小数\n\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n\n\n\n\n\n\n\n```\n\n\n### 系统变量\n\n#### 当前代码文件\n\n##### typescript\n```typescript\n__filename\n```\n\n##### golang\n```golang\nimport \"runtime\"\n_, filename, _, _ := runtime.Caller(1)\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n```\n\n\n#### 当前代码目录\n\n##### typescript\n```typescript\n__dirname\n```\n\n##### golang\n```golang\nimport (\n  \"runtime\"\n  \"path\"\n)\n_, filename, _, _ := runtime.Caller(1)\ndirname := path.Dir(filename)\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n```\n\n\n#### 进程启动路径\n\n##### typescript\n```typescript\nprocess.cwd()\n```\n\n##### golang\n```golang\nimport \"os\"\ndir, _ := os.Getwd() \n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n```\n\n\n#### 环境变量\n\n##### typescript\n```typescript\nprocess.env.ENV_NAME\n```\n\n##### golang\n```golang\nimport \"os\"\nos.Getenv(\"ENV_NAME\")\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n```\n\n\n#### 启动时入参\n\n##### typescript\n```typescript\nprocess.argv\n```\n\n##### golang\n```golang\nimport \"os\"\nos.Args\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n```\n\n\n#### 当前进程id\n\n##### typescript\n```typescript\nprocess.pid\n```\n\n##### golang\n```golang\nimport \"os\"\nos.Getpid()\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n```\n\n\n#### 退出进程\n\n##### typescript\n```typescript\nprocess.exit(signal)\n```\n\n##### golang\n```golang\nimport \"os\"\nos.Exit(signal)\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n\n```\n\n\n#### 输出\n\n##### typescript\n```typescript\nconsole.log\n```\n\n##### golang\n```golang\nimport \"fmt\"\nfmt.Println\n```\n\n##### rust\n```rust\n\n```\n\n##### c++\n```c++\n// include \u003ciostream\u003e\nstd::cout \u003c\u003c value \u003c\u003c std::endl;\n\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fechosoar%2Fprogram-languages-compare","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fechosoar%2Fprogram-languages-compare","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fechosoar%2Fprogram-languages-compare/lists"}