গো থেকে মাইএসকিউএলে কানেক্ট করার প্রস্তাবিত উপায় কী?


163

আমি গো থেকে কোনও মাইএসকিউএল ডাটাবেসে কানেক্ট করার জন্য একটি নির্ভরযোগ্য সমাধান খুঁজছি। আমি চারপাশে কয়েকটি গ্রন্থাগার দেখেছি তবে সম্পূর্ণতা এবং বর্তমান রক্ষণাবেক্ষণের বিভিন্ন রাজ্য নির্ধারণ করা কঠিন is আমার জটিল চাহিদা নেই তবে আমি কী জানতে চাইছি লোকেরা কী নির্ভর করছে বা মাইএসকিউএলে কানেক্ট করার সর্বাধিক মানক সমাধান।

উত্তর:


262

কয়েকটি ড্রাইভার উপলব্ধ তবে আপনার কেবলমাত্র সেইগুলি বিবেচনা করা উচিত যা ডেটাবেস / এসকিউএল এপিআই প্রয়োগ করে

  • এটি একটি পরিষ্কার এবং দক্ষ বাক্য গঠন সরবরাহ করে,
  • এটি নিশ্চিত করে যে আপনি আমদানি এবং সংযোগকে পৃথক করে আপনার কোড পরিবর্তন না করেই ড্রাইভারটি পরিবর্তন করতে পারবেন।

মাইএসকিউএল-এর জন্য দুটি দ্রুত এবং নির্ভরযোগ্য ড্রাইভার উপলব্ধ:

আমি তাদের দু'টিই প্রোডাকশনে ব্যবহার করেছি, কয়েক মাস ধরে ব্যয় ছাড়াই কয়েক মিলিয়ন সংযোগ নম্বর নিয়ে প্রোগ্রাম চলছে running

অন্যান্য এসকিউএল ডাটাবেস ড্রাইভার গো-উইকিতে তালিকাবদ্ধ রয়েছে

মাইমাইএসকিউএল ব্যবহার করার সময় আমদানি করুন:

import (
    "database/sql"
    _ "github.com/ziutek/mymysql/godrv"
)

গো-মাইএসকিউএল-ড্রাইভার ব্যবহার করার সময় আমদানি করুন:

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
)

মাইমাইএসকিউএল ব্যবহার করে সংযোগ স্থাপন এবং বন্ধ:

con, err := sql.Open("mymysql", database+"/"+user+"/"+password)
defer con.Close()
// here you can use the connection, it will be closed when function returns

গো-মাইএসকিউএল-ড্রাইভার ব্যবহার করে সংযোগ এবং সমাপ্তি:

con, err := sql.Open("mysql", store.user+":"+store.password+"@/"+store.database)
defer con.Close()

একটি সারি নির্বাচন করুন:

row := con.QueryRow("select mdpr, x, y, z from sometable where id=?", id)
cb := new(SomeThing)
err := row.Scan(&cb.Mdpr, &cb.X, &cb.Y, &cb.Z)

একাধিক সারি নির্বাচন করুন এবং ফলাফলগুলি সহ একটি অ্যারে তৈরি করুন:

rows, err := con.Query("select a, b from item where p1=? and p2=?", p1, p2)
if err != nil { /* error handling */}
items := make([]*SomeStruct, 0, 10)
var ida, idb uint
for rows.Next() {
    err = rows.Scan(&ida, &idb)
    if err != nil { /* error handling */}
    items = append(items, &SomeStruct{ida, idb})
}

Sertোকান:

_, err = con.Exec("insert into tbl (id, mdpr, isok) values (?, ?, 1)", id, mdpr)

আপনি দেখতে পাবেন যে মাইএসকিউএল এর সাথে গোয়ে কাজ করা একটি আনন্দদায়ক অভিজ্ঞতা: আমি কখনও তা করি না কোনও সমস্যা হয়নি, আমার সার্ভারগুলি কয়েক মাস ধরে ত্রুটি বা ফাঁস ছাড়াই চলে। বেশিরভাগ ফাংশনগুলি সহজেই একটি পরিবর্তনশীল সংখ্যক আর্গুমেন্ট গ্রহণ করে এমন একটি কাজকে হালকা করে তোলে যা অনেক ভাষায় ক্লান্তিকর।

নোট করুন, ভবিষ্যতে, আপনাকে অন্য মাইএসকিউএল ড্রাইভার ব্যবহার করতে হবে, আপনাকে কেবল একটি গো ফাইলে দুটি লাইন পরিবর্তন করতে হবে: লাইনটি আমদানি করছে এবং সংযোগটি খোলার লাইন।


2
আপনাকে অনেক ধন্যবাদ, আমি এটি দিয়ে চেষ্টা করব। আমি পছন্দ করি যে গো লাইব্রেরিগুলি কার্যকর করতে পারে এমন ডেটাবেস / স্কোয়েল প্যাকেজ সরবরাহ করে।
সের্গি মনসিলা

9
Newbies জন্য দুর্দান্ত প্রাইমার। ধন্যবাদ।
রিক -777

5
(অন্যান্য DBMSs জন্য, খুব) পরীক্ষিত ড্রাইভার তালিকা পাওয়া যাবে code.google.com/p/go-wiki/wiki/SQLDrivers একটি দ্বিতীয় জনপ্রিয় মাইএসকিউএল-চালক নেই: github.com/Go-SQL-Driver/MySQL (আমার দ্বারা লিখিত)
জুলিয়ান শ্মিড্ট

1
@ জুলিয়েনশ্মমিট আমি আপনার লিঙ্কটি উল্লেখ করতে আমার উত্তর সম্পাদনা করেছি। আপনার যদি এই দুটি ড্রাইভারের মধ্যে তুলনার সাথে একটি লিঙ্ক থাকে তবে এটি স্বাগত হবে।
অস্বীকার করেছেন সাগুরেট

1
@ জেইনেল এটি কেবল একটি উদাহরণ ( এই ব্যক্তিগত প্রকল্প থেকে নেওয়া )। আমি এটির পরিবর্তে সম্পাদনা করেছি SomeThing। এই লাইনের মূলটি হ'ল মধ্যবর্তী ভেরিয়েবলগুলি ব্যতীত আপনার প্রশ্নের ফলাফলের সাথে কীভাবে কোনও কাঠামো সরাসরি পূরণ করতে হয় তা দেখানো।
অস্বীকার করেছেন সাগুরেট

2

1 টি সারির উদাহরণ নির্বাচন করুন:

row := con.QueryRow("select mdpr, x, y, z from sometable where id=?",id) 
cb := new(SomeThing) 
err := row.Scan(&cb.Mdpr, &cb.X, &cb.Y, &cb.Z)

row.Next()এই উদাহরণে একটি অনুপস্থিত আছে। এটি কল করতে হবেrow.Next()ফিরে আসা প্রথম সারিতে এটি ধরতে হবে।

এছাড়াও লাইব্রেরিতে কিছুটা নমনীয়তা রয়েছে যা কোনও উপায়ে ডেটা মিনিমালিজম প্রচার করার চেষ্টা করে। আপনি যদি স্ক্যান না করে এমন কলামগুলি নির্বাচন করার চেষ্টা করেন তবে এটি ত্রুটিগুলি ফেলে দেবে (কেবলমাত্র সতর্কতা নয়)


2
এটি সঠিক নয়: কোয়েরি ফাংশনটি * সারি প্রদান করে। এই ফাংশনটি দাবি করে যে ক্যোয়ারীটি একটি একক সারিতে ফিরে আসে। ক্যোয়ারী () রিটার্ন দেয় (* সারি, ত্রুটি), যার জন্য সারিগুলিতে একটি কল প্রয়োজন e নেক্সট ()।
অ্যালান লামেলে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.