Golang与JAVA比较

任嘉平生愿 · · 9479 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

普通用法比较

函数

func swap(x, y string) (string, string) {

var a int = 100

  return y, x

}

a, b := swap("Mahesh", "Kumar")

go的方法需要加func

入参类型在参数后面,返回类型在入参后面

定义类型在变量的后面

返回值可以是多个参数

函数定义后可作为值来使用

java 中的null  go中的nil

go中的数组var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

go    &a   a的地址

var  ip  *int

java的class就是go的struct

java中get,set方法

Book1.title = "Go 语言"

fmt.Printf( "Book 1 title : %s\n", Book1.title)

结构体指针

切片就是java中的list

var numbers []int

numbers = append(numbers, 2,3,4)

copy(numbers1,numbers)

for循环

for _, num := range nums {

        sum += num

    }

for i, num := range nums {

        if num == 3 {

            fmt.Println("index:", i)

        }

    }

map用法:

 var countryCapitalMap map[string]string /*创建集合 */

    countryCapitalMap = make(map[string]string)

    /* map插入key - value对,各个国家对应的首都 */

    countryCapitalMap [ "France" ] = "Paris"

delete(countryCapitalMap, "France")

for country := range countryCapitalMap {

        fmt.Println(country, "首都是", countryCapitalMap [country])

    }

强制转化int,string

#string到int

int,err:=strconv.Atoi(string)

#string到int64

int64, err := strconv.ParseInt(string, 10, 64)

#int到string

string:=strconv.Itoa(int)

#int64到string

string:=strconv.FormatInt(int64,10)

Go 并发

func say(s string) {

    for i := 0; i < 5; i++ {

        time.Sleep(100 * time.Millisecond)

        fmt.Println(s)

    }

}

func main() {

    go say("world")

    say("hello")

}

通道(channel)

ch <- v // 把 v 发送到通道 ch

v := <-ch  // 从 ch 接收数据

          // 并把值赋给 v

s := []int{7, 2, 8, -9, 4, 0}

    c := make(chan int)

    go sum(s[:len(s)/2], c)

    go sum(s[len(s)/2:], c)

    x, y := <-c, <-c // 从通道 c 中接收


通道可以设置缓冲区,通过 make 的第二个参数指定缓冲区大小:

ch := make(chan int, 100)

func fibonacci(n int, c chan int) {

    x, y := 0, 1

    for i := 0; i < n; i++ {

        c <- x

        x, y = y, x+y

    }

    close(c)

}

func main() {

    c := make(chan int, 10)

    go fibonacci(cap(c), c)

    // range 函数遍历每个从通道接收到的数据,因为 c 在发送完 10 个

    // 数据之后就关闭了通道,所以这里我们 range 函数在接收到 10 个数据

    // 之后就结束了。如果上面的 c 通道不关闭,那么 range 函数就不

    // 会结束,从而在接收第 11 个数据的时候就阻塞了。

    for i := range c {

        fmt.Println(i)

    }


并发线程模型比较

在解决高并发的时候,go相对于java来说是省去了公用内存这一步改成了1对1传值通信。


Java线程模型

Go的线程实现模型



Go的线程实现模型-图灵社区

本文来自:简书

感谢作者:任嘉平生愿

查看原文:Golang与JAVA比较

入群交流(和以上内容无关):Go中文网 QQ 交流群:729884609 或加微信入微信群:274768166 备注:入群;关注公众号:Go语言中文网

9479 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传