有哪些适合学习Golang的网站?

有哪些适合学习Golang的网站? 我是一名C/C++开发者。从今天开始学习Go语言。 Go语言与C/C++类似且简单,所以我想我很快就能上手。 学习了大约一小时后,我发现语法和我想象中有差异,但我不知道如何解决,所以进展缓慢。 因此,我想找到一种语法能完全匹配C++。 有没有什么有用的网站?我遇到了这样的情况,即使是下面这些非常简单的数组、变量、初始化和循环语句都很困难,而且它们的行为与预期的情况不同。

像这样… C++

std::vector<std::string> test; // 空容器 ok
std::vector<std::string> test(2,"test"); // ok
std::vector<std::string> test = {"123","123123"} // ok
==> 可通过构造函数赋值,也可通过等号进行拷贝赋值,所以是可行的

Go语言

var test []string //ok
var test []string = {"123","345","456"} // 不工作
test := []string{"123","345","456"} // ok

==> 我不知道为什么它不工作或工作

更多关于有哪些适合学习Golang的网站?的实战教程也可以访问 https://www.itying.com/category-94-b0.html

18 回复

谢谢 ~

更多关于有哪些适合学习Golang的网站?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


不,需要写英文。

抱歉,我无法阅读此内容。

  • 切片 我漏掉了那个

什么样的示例代码能让我的Go语言技能更快地提升?

这是中文。你需要一个翻译。

或者你也可以简单地写成:

var s = []string{"a", "b", "c"}

var 关键字能够理解等号 = 后面的类型。

最近,Digital Ocean 向我们展示了一份精彩的内容。尽情享受吧!

我始终推荐获取一本《Go 程序设计语言》的副本。

对于任何编程语言,建议都是从解决小项目开始,并尝试成为 Go 社区的一部分。

在 Go 语言中,var 关键字仅声明一个类型的标识符。你不能在那个时候赋值。

那么按照你的说法,var foo int = 1 是无效的?

realbrotha:

var test string = {“123”,“345”,“456”}

勘误:* 切片

请访问Go语言之旅,如果愿意,也可以阅读Go编程语言规范

由于切片是复合类型,你只需要正确地构造它们。

我无法测试,因为这是用手机写的,但下面的代码应该能工作,尽管我实际上不会这么做,因为那种重复让我很烦。

var s []string = []string{"a", "b", "c"}

Go语言中的 var 关键字仅声明一个具有类型的标识符,此时不能为其赋值。 而短声明操作符 := 则同时声明一个标识符并为其赋值。

除了语言规范,也请参阅 Effective Go。

GoDoc.org

参考并学习: GoByExample

学习的方法有很多,以上都是不错的途径。

我通过这门课程快速入门了 Go:

课程图片

Web Development w/ Google’s Go (golang) Programming Language

学习由一位拥有超过 15 年教学经验的计算机科学大学教授讲授的 Web 编程。

首先:var 是一个关键字,用于声明变量。

然后看你给出的这个例子:

var test []string = {“123”,“345”,“456”}

上面这个是语法错误的,为什么呢?

原因是你应该这样写:

var test []string =[]string {“123”,“345”,“456”}

因为你做了一个赋值的操作。

再看下面的例子:

test := []string{“123”,“345”,“456”}

这个是声明了局部变量,然后通过自动推导的方式实现的。

我发现的最好的课程是Jon Calhoun的课程。他提供关于算法和一些"gophercises"的免费课程。他还有一个付费的Web开发课程,这是我在这个主题上找到的最好的资源。

Jon Calhoun的优势在于,与Udemy上的许多课程不同,他实际上解释了如何将各个部分组合在一起,而不仅仅是大声朗读包的文档。

他在疫情期间提供了一个很大的折扣。Web开发课程最经济的选项是只购买他的书(不含视频录像),大约40美元。包含视频录像的完整课程大约150美元,非常物有所值。

作为C++开发者,你遇到的困惑很常见。Go的语法设计确实与C++有显著差异,特别是初始化方面。让我直接解释你遇到的问题并提供解决方案。

核心差异解析

Go语言没有构造函数,初始化语法更严格。你遇到的数组/切片初始化问题源于Go的类型系统设计:

// C++风格(Go中无效)
var test []string = {"123","345","456"}  // 编译错误

// Go正确写法
var test []string = []string{"123","345","456"}  // 完整类型声明
test := []string{"123","345","456"}              // 类型推断简写

推荐学习资源

官方文档(首选)

针对C/C++开发者的资源

具体语法对比示例

// 1. 数组初始化对比
// C++: int arr[3] = {1, 2, 3};
// Go:
var arr1 [3]int = [3]int{1, 2, 3}
arr2 := [3]int{1, 2, 3}

// 2. 切片(动态数组)初始化
// C++: std::vector<int> vec = {1, 2, 3};
// Go:
var slice1 []int = []int{1, 2, 3}
slice2 := []int{1, 2, 3}

// 3. 映射(map)初始化
// C++: std::map<std::string, int> m = {{"a", 1}, {"b", 2}};
// Go:
var m1 map[string]int = map[string]int{"a": 1, "b": 2}
m2 := map[string]int{"a": 1, "b": 2}

// 4. 结构体初始化
type Point struct {
    X, Y int
}

// C++: Point p = {1, 2};
// Go:
var p1 Point = Point{X: 1, Y: 2}
p2 := Point{X: 1, Y: 2}
p3 := Point{1, 2}  // 顺序初始化

关键概念差异

// Go没有构造函数,使用工厂函数模式
type MyStruct struct {
    data []string
}

// 类似构造函数的工厂函数
func NewMyStruct(items []string) *MyStruct {
    return &MyStruct{data: items}
}

// 使用
obj := NewMyStruct([]string{"a", "b", "c"})

// Go的赋值是值拷贝(对于slice/map是指针拷贝)
slice1 := []int{1, 2, 3}
slice2 := slice1  // 共享底层数组
slice2[0] = 99    // slice1[0]也变为99

// 深拷贝需要显式操作
slice3 := make([]int, len(slice1))
copy(slice3, slice1)

实用学习建议

直接从官方文档开始,特别是"Go for C++ Programmers"这篇文档。它详细解释了两种语言的核心差异,能帮你快速建立正确的思维模型。Go Tour的交互式练习能让你立即验证语法理解。

记住Go的设计哲学是"显式优于隐式",这解释了为什么类型声明需要更完整。一旦适应这种显式风格,你会发现代码的可读性和维护性显著提升。

回到顶部